package com.ptms.dto;

import jakarta.validation.constraints.*;
import lombok.Data;

/**
 * 教练注册参数DTO（适配前端：新增邮箱+移除教练等级）
 */
@Data // Lombok简化getter/setter，需引入lombok依赖
public class CoachRegisterDTO {
    /**
     * 用户名（4-16位，字母/数字/下划线）
     */
    @NotBlank(message = "用户名不能为空")
    @Size(min = 4, max = 16, message = "用户名长度需在4-16位之间")
    @Pattern(regexp = "^[a-zA-Z0-9_]+$", message = "用户名只能包含字母、数字和下划线")
    private String username;

    /**
     * 密码（8-16位，字母+数字+特殊字符@$!%*#?&）
     */
    @NotBlank(message = "密码不能为空")
    @Size(min = 8, max = 16, message = "密码长度需在8-16位之间")
    @Pattern(regexp = "^(?=.*[A-Za-z])(?=.*\\d)(?=.*[@$!%*#?&])[A-Za-z\\d@$!%*#?&]{8,16}$",
            message = "密码必须包含字母、数字和特殊字符（@$!%*#?&）")
    private String password;

    /**
     * 真实姓名（2-10位中文）
     */
    @NotBlank(message = "真实姓名不能为空")
    @Size(min = 2, max = 10, message = "真实姓名长度需在2-10位之间")
    @Pattern(regexp = "^[\\u4e00-\\u9fa5]+$", message = "真实姓名只能包含中文")
    private String realName;

    /**
     * 手机号（11位中国大陆手机号）
     */
    @NotBlank(message = "手机号不能为空")
    @Pattern(regexp = "^1[3-9]\\d{9}$", message = "请输入有效的11位手机号")
    private String phone;

    /**
     * 邮箱（用于接收通知，需符合标准格式）
     */
    @NotBlank(message = "邮箱不能为空")
    @Pattern(regexp = "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$",
            message = "请输入有效的邮箱格式（如：xxx@xxx.com）")
    @Size(max = 50, message = "邮箱长度不能超过50个字符")
    private String email;

    /**
     * 性别（male=男，female=女）
     */
    @NotBlank(message = "性别不能为空")
    @Pattern(regexp = "^(male|female)$", message = "性别选择无效")
    private String gender;

    /**
     * 年龄（18-65岁）
     */
    @NotNull(message = "年龄不能为空")
    @Min(value = 18, message = "教练年龄不能小于18岁")
    @Max(value = 65, message = "教练年龄不能大于65岁")
    private Integer age;



    // 新增校区ID字段
    @NotNull(message = "校区ID不能为空")
    private Long campus_id;

    /**
     * 教龄（0-50年）
     */
    @NotNull(message = "教龄不能为空")
    @Min(value = 0, message = "教龄不能小于0年")
    @Max(value = 50, message = "教龄不能大于50年")
    private Integer teachingYears;

    /**
     * 证件照URL（前端上传后返回的地址）
     */
    @NotBlank(message = "证件照不能为空")
    @Pattern(regexp = "^https?://.*$", message = "证件照URL格式无效")
    private String photo;

    /**
     * 教学经历（至少200字）
     */
    @NotBlank(message = "教学经历不能为空")
    @Size(min = 200, message = "教学经历至少需要200字描述")
    private String teachingExperience;
}